package top.infopub.mgr.bpa.service;

import com.github.pagehelper.PageInfo;
import top.infopub.enums.bpa.BpaProcessDetailTypeEnum;
import top.infopub.mgr.bpa.domain.BpaHisProcessDomain;
import top.infopub.mgr.common.page.ParamPage;
import top.infopub.model.bpa.BpaProcessDetail;
import top.infopub.security.vo.AuthorizationVO;

import java.util.List;

/**
 * 融资管理--流程服务类
 */
public interface BpaProcessManageService {
    /**
     * 商务管理-->发起流程
     * @param bpdt 节点枚举类，传入指定的枚举
     * @param detailJson 详情页面全部的json数据
     * @param bizSguid 业务表SGUID
     * @param proCode 项目编码
     * @param vo 登录人员信息
     * @return
     */
    String sendProcess(BpaProcessDetailTypeEnum bpdt, String detailJson,
                       String bizSguid, String proCode, AuthorizationVO vo);

    /**
     * 商务管理-->项目审批
     * @param bizSguid 业务表SGUID
     * @param processId 流程ID
     * @param status 0=不同意 1=同意
     * @param auditMsg 审批意见
     */
    void auditProject(String bizSguid, String processId, String status, String auditMsg);

    /**
     * 知会流程通用处理
     * @param templateId
     * @param thisIdxNo
     * @param processId
     * @param srcBizTable
     * @param srcBizSguid
     * @return 0：没有后续流程，大于0为当前知会节点idx
     */
    int notifyProcess(String templateId, Integer thisIdxNo, String processId, String srcBizTable, String srcBizSguid);

    /**
     * 监察是否显示审批tab页
     * @param processId 流程Id
     * @return 0=不显示，1=显示
     */
    String checkShowAuditTab(String processId, AuthorizationVO vo);

    /**
     * 根据sguid获取项目编码
     * @param tableName 业务表名
     * @param id sguid
     * @return 项目编码
     */
    String getProCodeById(String tableName, String id);

    /**
     * 根据流程Id查询项目流程明细
     * @param processId
     * @return
     */
    BpaProcessDetail queryByProcessId(String processId);

    /**
     * 查询流程中的指定审批角色人员
     * @param processId 流程Id
     * @param groupId 审批角色Id
     * @return
     */
    List<String> queryFinanceUserIdByProcessId(String processId, String state, String groupId);

    /**
     * 修改指定表中的OA_ID
     * @param tableName 表名
     * @param oaId OAId
     * @param id SGUID
     */
    void modifyOaIdById(String tableName, String oaId, String id);

    /**
     * 查询历史流程审批列表
     * @param proCode
     * @param paramPage
     * @return
     */
    PageInfo<BpaHisProcessDomain> getHisProcessPage(String proCode, ParamPage paramPage);

    /**
     * 根据ID修改详情json字符串
     * @param cpd
     */
    void modifyDetailJsonById(BpaProcessDetail cpd);
}

